home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Information
/
THINK C Digest
/
1993
/
93-03
< prev
next >
Wrap
Text File
|
1995-12-31
|
83KB
|
2,359 lines
Path: ucivax!gateway
From: jenlan@vision.arc.nasa.gov (Jennifer Lanham)
Subject: Re: GetNewWindow function call in Think C 5.04
Message-ID: <9303011725.AA10507@vision.arc.nasa.gov>
Newsgroups: fa.think-c
Lines: 10
Date: 1 Mar 93 17:26:46 GMT
Sylvia -
I'm sure some one has pointed this out, but GetNewWindow takes
the following ( int, Ptr, WindowPtr). With tighter type checking,
you get your error. Type casting is in order.
Jen
jenlan@gauss.arc.nasa.gov
( Penn cse '88 ) how's it going in the Moore School ? :-)
Path: ucivax!gateway
From: jenlan@vision.arc.nasa.gov (Jennifer Lanham)
Subject: RE: GetNewWindow...NO MORE ANSWERS PLEASE!
Message-ID: <9303011725.AA10510@vision.arc.nasa.gov>
Newsgroups: fa.think-c
Lines: 1
Date: 1 Mar 93 17:26:52 GMT
ooops sorry just replied!
Path: ucivax!gateway
From: dnebing@andy.bgsu.edu
Subject: Re: "Invalid Redeclaration" Errors Which Don't Exist
Message-ID: <9303011856.AA10412@andy.bgsu.edu>
Newsgroups: fa.think-c
Lines: 23
Date: 1 Mar 93 18:56:46 GMT
>
>Well, you can always add a #include "project.prfx" statement to your
>prefix, and click on the "copy >>" button to make it the defualt for
>all new projects. Although you'll have to customize it if you put more
>than one project in a single folder...
>
> -phil
>----
> Phil Shapiro Software Engineer
> Language Products Group Symantec Corporation
> Internet: phils@cs.brandeis.edu
> "relatively inexperienced"
This is one problem that I never quite understood. When I would make
the changes in the preferences and try to copy them to all new projects, it
would only work until I quit TC. The next time that I would want to start
up TC, I would have to change all of the preferences again.
Since TC does not use a preferences file, is there any way of modifying
TC so that my preferences are the default?
Dave
Path: ucivax!gateway
From: russne@catseq.catlin.edu (Russ Nelson)
Subject: trapping keyUp
Message-ID: <Pine.2.27-experimental.9302170812.A14769@catseq.catlin.edu>
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Mime-Version: 1.0
Newsgroups: fa.think-c
Reply-To: Russ Nelson <russne@catseq.catlin.edu>
Lines: 8
Date: 1 Mar 93 19:11:45 GMT
I have a WaitNextEvent loop I'm using in my game, but it isn't trapping
keyUp's. I am using everyEvent as my mask, too, and it still doesn't work.
Any ideas?
Russ Nelson * internet: russne@catseq.catlin.edu * bitnet: nelson@catlin
->This came directly from a computer and is not to be doubted or disbelieved.<-
Path: ucivax!gateway
From: winter@ai.rl.af.mil (Jim Wintermyre)
Subject: Detecting Notifications
Message-ID: <9303012036.AA01619@AI.RL.AF.MIL>
Newsgroups: fa.think-c
Lines: 13
Date: 1 Mar 93 20:37:40 GMT
Hi. Does anyone know of a way to detect from within an application when ANOTHER
application posts a notification? I can't patch NMInstall because I'm an app
and I wouldn't be able to detect some other app calling it. I thought of
looking at the application menu for an item with a diamond by it, or checking
the front window to see if it's an alert. But what about other notifications,
like just a flashing icon? Darkness seems to be able to do it. Any ideas?
Thanks,
Jim
winter@ai.rl.af.mil
wintermyrej@lonex.rl.af.mil
Path: ucivax!gateway
From: Chuck_Shavit.KSRHQ@ksr.com (Chuck Shavit)
Subject: RE: "Invalid Redeclaration" Errors Which Don't Exist
Message-ID: <9303012133.AA03534@kaos.ksr.com>
Newsgroups: fa.think-c
Lines: 14
Date: 1 Mar 93 21:35:06 GMT
> This is one problem that I never quite understood. When I would make
> the changes in the preferences and try to copy them to all new projects, it
> would only work until I quit TC. The next time that I would want to start
> up TC, I would have to change all of the preferences again.
I am not sure about TC, but it took me a while before I understood why this
thing happened with some other applications, namely that Preferences are
not saved. At least in some cases, it was AutoDoubler: if the preferences
are saved as a resource of the application and the application is compressed,
it sometimes fails with no warning.
Is your TC AutoDoubled?
Chuck Shavit
Path: ucivax!gateway
From: Chris_Page@qmgated.mv.us.adobe.com (Chris Page)
Subject: RE>trapping keyUp
Message-ID: <9303012257.AA28042@qmgw.mv.us.adobe.com>
Newsgroups: fa.think-c
Lines: 33
Date: 1 Mar 93 22:57:05 GMT
Reply to: RE>trapping keyUp
KeyUp events are masked out by the System event mask, since they aren't
generally useful. You can enable them during your application by changing
the value of the System event mask to include keyUp events. You should
probably use a bit-or operation to set the keyUp bit instead of setting
all the bits of the mask arbitrarily. Additionally, you must be sure to
save and restore the original value of the mask when your application
quits.
The low memory global is SysEvtMask (at 0x0144). You may read this to
save the old value, but to change the value, you must call SetEventMask()
with the new mask value.
Chris Page
Adobe Systems, Inc.
cpage@mv.us.adobe.com
Disclaimer: opinions expressed are not necessarily those of my employer.
--------------------------------------
Date: 3/1/93 2:23 PM
To: Chris Page
From: russne@catseq.catlin.edu
I have a WaitNextEvent loop I'm using in my game, but it isn't trapping
keyUp's. I am using everyEvent as my mask, too, and it still doesn't work.
Any ideas?
Russ Nelson * internet: russne@catseq.catlin.edu * bitnet:
nelson@catlin->This came directly from a computer and is not to be doubted or
disbelieved.<-
Path: ucivax!gateway
From: tsang@isi.com ("Kam C. Tsang")
Subject: trapping keyUp
From: Russ Nelson <russne@catseq.catlin.edu>
Mime-Version: 1.0
Date: 1 Mar 93 19:11:45 GMT
Message-ID: <9303012321.AA02491@hardrock>
In-Reply-To: Russ Nelson's message of 1 Mar 93 19:11:45 GMT
Newsgroups: fa.think-c
Lines: 8
Date: 1 Mar 93 23:20:57 GMT
I have a WaitNextEvent loop I'm using in my game, but it isn't trapping
keyUp's. I am using everyEvent as my mask, too, and it still doesn't work.
Any ideas?
Use GetKeys, may be on null events.
-kam
tsang@isi.com (tsang@pure.com after Mar 5)
Path: ucivax!gateway
From: kirk_crawford@qmail2.aero.org (Kirk Crawford)
Subject: Think C 4 and System 7
Message-ID: <199303012334.AA12150@aerospace.aero.org>
Posted-Date: 1 Mar 93 15:31:53 U
Newsgroups: fa.think-c
Lines: 10
Date: 1 Mar 93 23:34:59 GMT
Subject: Think C 4 and System 7
What are the incompatibilities between System 7 and Think C 4?
My officemate is having problems with the Think C 4 debugger and System7.
(it locks up)
-Kirk Crawford
Path: ucivax!gateway
From: franklin@eecs.ucdavis.edu (Paul Franklin)
Subject: Re: RE>trapping keyUp
Message-ID: <9303020240.AA27568@luffa.eecs.ucdavis.edu>
In-Reply-To: Your message of "01 Mar 93 22:57:05 PST."
<9303012257.AA28042@qmgw.mv.us.adobe.com>
Newsgroups: fa.think-c
Reply-To: franklin@ece.ucdavis.edu
Lines: 41
Date: 2 Mar 93 02:40:39 GMT
What follows is a fairly good description of what happens under
UniFinder (pre-MultiFinder). However, with Multifinder, the process
has changed slightly.
> Reply to: RE>trapping keyUp
>KeyUp events are masked out by the System event mask, since they aren't
>generally useful. You can enable them during your application by changing
>the value of the System event mask to include keyUp events. You should
>probably use a bit-or operation to set the keyUp bit instead of setting
>all the bits of the mask arbitrarily. Additionally, you must be sure to
>save and restore the original value of the mask when your application
>quits.
>
>The low memory global is SysEvtMask (at 0x0144). You may read this to
>save the old value, but to change the value, you must call SetEventMask()
>with the new mask value.
Actually, with MultiFinder, event masks seem like they are on their
way out, along with keyUp events (in my opinion). Why? If another
application is getting background task time when an event arrives,
that application's mask is used. (Last I heard, at least.) Apple's
documentation says that every application should be using
'everyEvent-keyUp' as a mask when they're in the background, so you
will at least miss some of the keyUp events, depending on how much
time you give to background tasks (which Finder will be glad to gobble
up, I'm sure).
Note that this also means you can get events which are not in your
event mask, if they are placed in the event queue while your
application is the foreground application and another application is
getting background task time. It might even be possible for this to
happen as you're swapping foreground applications.
Technically, what happens is SysEvtMask is swapped with every
application. This sounds reasonable. However, it gets swapped at
both major and minor context switches, resulting in what I describe in
the previous paragraph. (Minor context switches are done to give
background tasks time. Major switches make a new application the
foreground app.)
--Paul Franklin
Path: ucivax!gateway
From: umdenbo0@ccu.umanitoba.ca ("David A. Denboer")
Subject: GetKeys Problems
Message-ID: <9303020411.AA26397@ccu.UManitoba.CA>
X-Mailer: ELM [version 2.3 PL11]
Newsgroups: fa.think-c
Lines: 18
Date: 2 Mar 93 04:11:43 GMT
I am using GetKeys in my application, and it calls fine, but the value
that it returns is incomprehensible.
I call it with:
GetKeys(&myKeys);
When I poll the individual elements of the array, I get some weird responses.
I looked it up in Inside Mac, and the variable that is returned is a
Packed Array[1..127] of Boolean;
One of the results that I get back is 22347776, and that is consistently
returned for myKeys[4]
What am I doing wrong? All I want ot do is see if the user has pressed a key
while I am in the background...
Any help would be greatly appreciated.
--
David A. denBoer * Musi Computer Products
umdenbo0@next01.cc.umanitoba.ca (NeXT Mail welcome) * 9 Abington Rd
Manitoba Macintosh Developers Assn * Winnipeg, MB
mac-develop-request@ccu.umanitoba.ca * Canada, R2J 3S7
Path: ucivax!gateway
From: idowell@bbn.com
Subject: Novice Popup Menu Question
Message-ID: <9303021941.aa26692@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 16
Date: 3 Mar 93 03:41:19 GMT
I seem to be unable to "install" a popup menu I'm
creating on the fly. The PopupPane call to MakePopupMenu
can't find the menuID and looks (unsuccessfully) for a
menu resource with that ID.
theMenu = NewMenu(gNextMenuNumber,"\pLength");
AppendMenu ( theMenu, "\pfeet");
AppendMenu ( theMenu, "\pinches");
gBartender->AddMenu(gNextMenuNumber,FALSE,0);
UnitsPopup->MakePopupMenu(gNextMenuNumber,TRUE,FALSE);
Can anyone help me out?
Thanks in advance,
Ian Dowell
idowell@bbn.com
Path: ucivax!gateway
From: C511899@mizzou1.missouri.edu (Andrew McAllister)
Subject: Help! Need pow(x,y) in a code resource (Q)
Message-ID: <9303021946.aa27037@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 42
Date: 3 Mar 93 03:46:36 GMT
Hi all,
I'm trying to write a code resource, and need the standard C function:
pow(x,y)
But alas math stuff is not available in Ansi-A4 which I need to write the
code resource. :(
Here's what I've done so far:
1)Create a new library called "Ansi-a4 /w math". It has the same
files as Ansi-a4 and the math.c file also. Library compiles OK.
2)Remove ANSI lib in project and replace with new lib.
Romoved objects and project recompiles just fine.
The results: project compiles and loads fine, but bombs promptly after
exiting any function that has a math call in it. Errors include:
illegal instruction, odd address, etc. Please note that the math call
does not cause the bomb, only exiting a function that uses math calls.
Other settings: Generate 68020 and 68881 instructions are on.
Here's a list of the math functions that I need: sqrt(), log(), and pow().
Sample code:
#include <math.h>
#include <other stuff>
void my_bombing_function(double x)
{ double stupid_variable;
stupid_variable = pow(x,5);
}
main ()
{
RememberA0();
SetUpA4();
Allocate_stuff();
my_bombing_function(); /* program bombs when returning from here */
RestoreA4();
}
If I can't get this to work, then I might as well give up on my master's
thesis, quit school, and start learning how to flip burgers.:(
Thanx in advance
Andrew McAllister c511899@mizzou1.missouri.edu
Path: ucivax!gateway
From: C511899@mizzou1.missouri.edu (Andrew McAllister)
Subject: pow(x,y) in code resources: SOLUTION
Message-ID: <9303051710.aa28850@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 41
Date: 6 Mar 93 01:10:54 GMT
My sincerest thanks to all who responded to my pleas for help.
The problem: How do I use math functions in code resources using the A4
features inherent in Think C.
The solution: The most general solution to making any library A4 compatible
and available in code resources is to open the library and set the project
type to anything BUT application and bring the project up-to-date. Think C
will recompile the lib so that it uses the A4 register instead of the A5.
Pretty simple. HOWEVER, some pieces of code will not recompile as a code
resources because variables are initialized in their declarations.
An example: To set the standard ANSI lib to be A4 and code resource
compatible do this:
Make a copy of the lib.
Open the ANSI lib.
Choose options from the Edit menu and set the file prefix to
#define _NOCONSOLE_
Remove these files from the project: command.c, console.c,
locale.c, time.c (it is necessary to remove these files because
each one contains a structure that is initialized as it is declared.
Think C won't allow aggregate initialization in code resources.
Set the project type to CODE and fill in the appropriate blanks. (It
doesn't matter what code number or resource type you pick, just
fill them with something.)
Chose bring-up-to-date from the Project menu.
Poof! You now have an A4 and code resource compatible library that
contains almost all of the ANSI functions. Obviously you can't do
console I/O or use the time functions, but hey it could be worse.
Another tip: Make sure the compiler settings you use in your project are
the same as the ones you used to bring your new lib up-to-date. In other
words, if 68020 and 68881 are set in your project, it would really help
if they were set in your lib too.
If anyone has any questions about this process, please e-mail me and I
will be happy to help in any way I can.
Thanks again to the following people who helped me in my hours of need:
Bob Boonstra, Jan G. Zegers, Bob Beason, Jeremy Ahouse,
Julian Vrieslander, Josh Cherry, Eric Slosser, and Ramin Firoozye.
Andrew McAllister c511899@mizzou1.missouri.edu
"Put funny closing signature here."
Path: ucivax!gateway
From: 91287%TAYLORU@uicvm.uic.edu (Mark Goddard)
Subject: Writing Comm Toolbox Tools
Message-ID: <01GVHJQWXV4W8Y5IZ4@TAYLORU>
Newsgroups: fa.think-c
X-VMS-To: IN%"think-c@ics.uci.edu"
Lines: 12
Date: 6 Mar 93 16:59:40 GMT
X-Envelope-to: think-c@ics.uci.edu
Hi!
I am in the process of trying to write a file transfer tool for a class
project. I have Inside the Comm Toolbox and the Developer CD, but neither has
any clear sample code which describes how everything works. I would really
appreciate it if anyone could point me to an ftp site which might have some
sample code.
Thanks a lot!
Mark Goddard
91287@tayloru.bitnet
Path: ucivax!gateway
From: choupt@world.std.com (Charles E Houpt)
Subject: Using ANSI malloc-ed memory and the Mac Memory Mgr
Message-ID: <199303080410.AA14721@world.std.com>
Newsgroups: fa.think-c
Lines: 26
Date: 8 Mar 93 04:10:40 GMT
I'm working on a project to port a large unix program (a machine
translation system) to the Mac.
The problem I have is that Think's ANSI library provides a
implementation of malloc() and free() that iteracts poorly with the Mac
Memory Manager. Here is the problem:
The free() call frees memory for future use by malloc(), but not for
NewHandle()/NewPtr().
Once a chunk of memory has been malloc-ed it is never returned to the Mac
heap. This can easily cause a situation where you have megabytes of
malloc-able memory, but zero memory for NewHandle().
Think's manual admits the above problem and warns agains mixing mallocs
and Mac Memory Mgr calls.
One obvious solution I've tried is to replace malloc() with NewPtr(), but
this is very slow and can cause alot of fragmentation.
I am sure some of you have run into this problem before, what solution did
you find?
I'll mail a summary of responses.
Thanks - Chuck (choupt@world.std.com)
Path: ucivax!gateway
From: pchang@cs.stanford.edu (The Weasel)
Subject: Re: Using ANSI malloc-ed memory and the Mac Memory Mgr
Message-ID: <9303080503.AA19206@Xenon.Stanford.EDU>
In-Reply-To: <199303080410.AA14721@world.std.com>; from "Charles E Houpt" at Mar 8, 93 4:10 am
X-Mailer: ELM [version 2.3 PL11]
Newsgroups: fa.think-c
Lines: 17
Date: 8 Mar 93 05:03:15 GMT
Hi There,
If I remember correctly Time Endres at ice re-wrote some of the malloc
stuff so that it interacted nicely with the mac, or at least returned
stuff back to free store. The ftp site used to be: ftp.msen.com, but
this may have changed since I lasty checked.
Anyway, you might want to check this out, and if anyone else knows
of something else, or if I have made an error here please feel
free to crrect me, as if you wouldn't already :-)
Peter
--
Peter Chang | "Just waking up in the morning means
E-Mail: weasel@cs.stanford.edu | a lot to me."
Snail Mail: PO Box 9603 | Keith Richards
Stanford, CA 94309 |
Path: ucivax!gateway
From: jimlynch@netcom.com (Jim Lynch)
Subject: Re: Using ANSI malloc-ed memory and the Mac Memory Mgr
Message-ID: <9303080956.AA07444@netcom2.netcom.com>
Newsgroups: fa.think-c
Lines: 6
Date: 8 Mar 93 09:57:15 GMT
Then use only one or the other. Simple, huh? You can also malloc enough for a
heap zone... No, I like my original idea better: One or the other but not both.
Maybe another happy medium would be to define malloc in terms of NewPtr
and free in terms of DisposePtr... I still like my original idea because
handles are better/safer than pointers.
Path: ucivax!gateway
From: dnebing@andy.bgsu.edu ("Mr. Neb")
Subject: Re: Using ANSI malloc-ed memory and the Mac Memory Mgr
Message-ID: <9303081705.AA13050@andy.bgsu.edu>
Newsgroups: fa.think-c
Lines: 4
Date: 8 Mar 93 17:05:58 GMT
The ice-malloc stuff that you refered to can also be found int
the last release of Harvest C (the release with the source.)
dnebing
Path: ucivax!gateway
From: k.c.quick@open.ac.uk (Kevin Quick)
Subject: ShutDown Manager
Via: uk.ac.open; Mon, 8 Mar 1993 21:10:50 +0000
X-Sender: kc_quick@sunflower
Message-ID: <9303081248.AA24396@sunflower.open.ac.uk>
X-Mailer: Eudora 1.3
Newsgroups: fa.think-c
Lines: 16
Date: 9 Mar 93 00:00:32 GMT
I'm porting a basic program from an old machine to the mac. Being new to
mac programming I've run into a problem that I hope you can solve.
Because the program is being used by computer illiterates I want the
program to shutdown instead of returning to the finder.
I have installed shutdown.h but cannot get any shutdown calls to work.
An example of how to call the manager to shut down would be appreciated.
Kevin Quick
Computer Support Engineer
The Open University
Mail by Eudora 1.3
Path: ucivax!gateway
From: George_Tempel@monmouth-etdl1.army.mil (George Tempel)
Subject: variable arg lists
Message-ID: <01GVLVRXKB768WVZQN@MONMOUTH-etdl1.Army.MIL>
Content-transfer-encoding: 7BIT
Priority: Urgent
Newsgroups: fa.think-c
Lines: 15
Date: 9 Mar 93 19:30:28 GMT
variable arg lists
Does anyone have experience using variable length
argument lists? In particular, is there an easy way
to determine the number of args in the variable
length thang? Functions like printf() and scanf()
(and their siblings) can easily count the number
of percent signs in the format string to find
the number of arguments...but how else can it
be done?
george tempel
tempel@monmouth-etdl1.army.mil
Path: ucivax!gateway
From: morris@wais.com (Harry Morris)
Subject: variable arg lists
Message-ID: <9303101639.AA07822@wais.wais.com>
In-Reply-To: George Tempel's message of 9 Mar 93 19:30:28 GMT <01GVLVRXKB768WVZQN@MONMOUTH-etdl1.Army.MIL>
Newsgroups: fa.think-c
Lines: 23
Date: 10 Mar 93 16:36:04 GMT
From: George Tempel <George_Tempel@monmouth-etdl1.army.mil>
Date: 9 Mar 93 19:30:28 GMT
variable arg lists
Does anyone have experience using variable length
argument lists? In particular, is there an easy way
to determine the number of args in the variable
length thang? Functions like printf() and scanf()
(and their siblings) can easily count the number
of percent signs in the format string to find
the number of arguments...but how else can it
be done?
george tempel
tempel@monmouth-etdl1.army.mil
as far as I know you can't. You need some way for the called routine to
determin the number and type of arguments. Either give the # args as the
first parameter, or use a special value in the last arg which marks it as
the end.
Also remember that C promotes arguments as they are passed in, so floats
become doubles, and chars become ints.
Path: ucivax!gateway
From: sandvik@newton.apple.com (Kent Sandvik)
Subject: Re: variable arg lists
Message-ID: <9303101926.AA05173@newton.apple.com>
Newsgroups: fa.think-c
Lines: 66
Date: 10 Mar 93 19:51:42 GMT
At 16:36 3/10/93 +0000, Harry Morris wrote:
> From: George Tempel <George_Tempel@monmouth-etdl1.army.mil>
> Date: 9 Mar 93 19:30:28 GMT
>
> variable arg lists
> Does anyone have experience using variable length
> argument lists? In particular, is there an easy way
> to determine the number of args in the variable
> length thang? Functions like printf() and scanf()
> (and their siblings) can easily count the number
> of percent signs in the format string to find
> the number of arguments...but how else can it
> be done?
>
> george tempel
> tempel@monmouth-etdl1.army.mil
>
>as far as I know you can't. You need some way for the called routine to
>determin the number and type of arguments. Either give the # args as the
>first parameter, or use a special value in the last arg which marks it as
>the end.
Here's an example of va_args use, taken from the DTSC++Library kit on the
Developer CD (March-93). I think we are talking about va_args...
// vxdebugstr that also prints out by default __FILE__ and __LINE__
// information
void vxdebugstr(char* format,...)
{
char buff[255];
char final[255];
va_list arglist;
va_start(arglist,format);
vsprintf(buff,format,arglist); // *** parse your params here ***
va_end(arglist);
#ifdef FILELINEINFO
strcat(final,fileNameArray);
#ifdef TESTLEVEL2
strcat(final, " ;");
// MacsBug does not like embedded ;s
#endif
strcat(final, lineNumberArray);
#endif
strcat(final, buff);
c2p(final);
// Print out the message, based on the testing level
#ifdef TESTLEVEL1
AlertUser((Str255)final);
#endif
#ifdef TESTLEVEL2
::SysBreakStr((Str255)final);
// for high level debuggers
#endif
#ifdef TESTLEVEL3
::DebugStr((Str255)final);
#endif
}
Kent Sandvik
PIE Developer Technical Support
Path: ucivax!gateway
From: slosser@apple.com (eric slosser)
Subject: Re: ShutDown Manager
X-Sender: slosser@apple.com (Unverified)
Message-ID: <9303102005.AA02904@apple.com>
Newsgroups: fa.think-c
Lines: 52
Date: 10 Mar 93 20:07:56 GMT
>I'm porting a basic program from an old machine to the mac.
>
>Because the program is being used by computer illiterates I want the
>program to shutdown instead of returning to the finder.
>
>I have installed shutdown.h but cannot get any shutdown calls to work.
>
>An example of how to call the manager to shut down would be appreciated.
>
Example---------
#include <Shutdown.h>
main()
{
InitGraf(&qd.thePort);
ShutDwnPower();
}
Process---------
My first step was to refer to Think Reference 2.0, which told me that
ShutDwnPower() was only used by the System and Finder. So I guessed the
call made some assumptions about the environment of the caller.
By trying "main() { ShutDwnPower(); }", I found myself in Macsbug, with a
bus error, in the middle of some system code that was trying to play with
the current port.
By calling InitGraf, I got the ShutDwnPower to work.
Noise----------
The more you define "cannot get xxxx to work", the higher the quality of
the responses.
Shutting down the machine is fairly disruptive, and goes against the
general Mac philosophy that the user owns the machine, the programs are not
supposed to wrest control of it from the user. (Witness the UI-guidelines
on the topic of changing the screen depth).
In the case of novice users, and a public machine, strong measures are
occasionally appropriate. But couldn't you just put up a dialog, saying
"Welcome! Click the button to run Kevin's friendly app". If you put a
secret backdoor (like an invisible spot in the corner) that would allow the
literate to get back to the Finder, you'd solve your problem and never have
to say,
"I'd show you the program I wrote, but it shuts down the machine".
Eric Slosser Blue Meanie slosser@apple.com
Path: ucivax!gateway
From: laurence.kirchmeier@umich.edu (Laurie Kirchmeier)
Subject: Re: variable arg lists
X-Sender: laurie@helen.oit.itd.umich.edu
Message-ID: <9303102010.AA06189@oit.itd.umich.edu>
Newsgroups: fa.think-c
Lines: 37
Date: 10 Mar 93 20:12:38 GMT
> From: George Tempel <George_Tempel@monmouth-etdl1.army.mil>
> Date: 9 Mar 93 19:30:28 GMT
>
> variable arg lists
> Does anyone have experience using variable length
> argument lists? In particular, is there an easy way
> to determine the number of args in the variable
> length thang? Functions like printf() and scanf()
> (and their siblings) can easily count the number
> of percent signs in the format string to find
> the number of arguments...but how else can it
> be done?
>
> george tempel
> tempel@monmouth-etdl1.army.mil
>
>as far as I know you can't. You need some way for the called routine to
>determin the number and type of arguments. Either give the # args as the
>first parameter, or use a special value in the last arg which marks it as
>the end.
>
>Also remember that C promotes arguments as they are passed in, so floats
>become doubles, and chars become ints.
Indeed it can be done...
See The Think C Standard Libraries Reference pages 318-320. You can use
va_start, va_arg & va_end macros. There is an example as well as a
description.
I'm pretty sure this is part of the ANSI C standard - there is also a
description in Kernighan & Ritchie (2nd Edition) Section 7.3
Laurie Kirchmeier
Office of Instructional Technology
University of Michigan
ps. RTFM
Path: ucivax!gateway
From: ringrose@ai.mit.edu (Robert Ringrose)
Subject: variable arg lists
Message-ID: <9303102235.AA09944@fibula>
In-Reply-To: Laurie Kirchmeier's message of 10 Mar 93 20:12:38 GMT <9303102010.AA06189@oit.itd.umich.edu>
Newsgroups: fa.think-c
Lines: 17
Date: 10 Mar 93 22:36:18 GMT
Please READ his question before posting hasty replies.
> From: George Tempel <George_Tempel@monmouth-etdl1.army.mil>
> Date: 9 Mar 93 19:30:28 GMT
>
> length thang? Functions like printf() and scanf()
> (and their siblings) can easily count the number
> of percent signs in the format string to find
> the number of arguments...but how else can it
> be done?
Many people have pointed him at routines which are well-documented and allow
him to count the number of % signs in the format string. What George is
apparently looking for is a way to discover the number of arguments passed to a
variable-argument-length function. To my knowledge, this is not possible in C.
The arguments themselves must give their length.
Path: ucivax!gateway
From: P30WCC9%NIU.BITNET@uicvm.uic.edu (WES COVALT)
Subject: GetPoint()
Message-ID: <9303111404.aa11905@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 29
Date: 11 Mar 93 22:04:24 GMT
Hello,
I want to use the following function to "get" a point on the
screen. It changes the cursor to the cross and waits for a
mouseDown event. I'm having problems with mouse clicks on other
windows, the trashcan, or applications - I get the point, but
that window (MultiFinder, application etc.) becomes activated
and I don't want it to be. I just want the point on the screen.
I've Flushed the event queue but that isn't enough. What else
do I need to do?
Thanks.
Point GetPoint()
{
EventRecord theNewEvent;
Cursor theCross;
CursHandle theCrossH;
theCrossH = GetCursor( crossCursor );
theCross = **theCrossH;
SetCursor( &theCross );
while (!GetNextEvent ( ( mDownMask | activMask | app4Mask),
&theNewEvent))
{
...I show the coordinates...
}
FlushEvents( everyEvent, 0 );
return( theNewEvent.where );
}
Path: ucivax!gateway
From: C511899@mizzou1.missouri.edu (Andrew McAllister)
Subject: Initializing a handle.(Q)
Message-ID: <9303151240.aa24324@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 19
Date: 15 Mar 93 20:40:28 GMT
A trivial question:
When I declare a handle is it really a pointer to another pointer, or is
it just a pointer?
It seems to me that a handle is really just a pointer that functions like
NewHandle and GetCTable cause to point to another pointer.
Does any of this make sense?
if a declaration like Handle myhandle;
causes a resulting structure like this to be allocated
------------------ ------------------ -----------
|myhandle |----------->|32Bit Pointer |------>|NULL |
------------------ ------------------ -----------
What happens to the second 32Bit pointer when the handle is assigned
by NewHandle or GetCTable? Wouldn't this result in a lot of 32 bit holes
in memory?
If I set a handle to NULL shortly after I declare it and before I use it,
then I'm not creating any 32 bit holes right?
Andy McAllister
c511899@mizzou1.missouri.edu
"Insert funny quote or signature here."
Path: ucivax!gateway
From: dnebing@andy.bgsu.edu ("Mr. Neb")
Subject: Re: Initializing a handle.(Q)
Message-ID: <9303160441.AA10076@andy.bgsu.edu>
Newsgroups: fa.think-c
Lines: 28
Date: 16 Mar 93 04:42:07 GMT
A handle is basically a pointer to a pointer to a data structure, but it is
also a little bit more.
When you app starts up, there is some room set aside for an area of Master
pointers. A handle is actually a pointer to one of these master pointers.
When an os trap "moves memory", your handle will point to the same master
pointer, but the address in the master pointer could be completly different.
Moving memory can sound kind of vague, but what it means is that the Memory
Manager will shuffle the chunks of memory that you have allocated around
in order to keep your area of memory from getting too fragmented.
So a handle is a way for your app to keep track of where your data really is
and still allow the Memory Manager to do it's trick. As a point of reference,
NewPtr will return a pointer to a block of memory that the memory manager can
not move. This potentially can fragment your memory causing your app to die
in the water.
When you define a handle (Handle myHandle;), this just sets aside the 32 bits
needed to hold the address of a master pointer, but it does not assign itself
a master pointer and a block of memory. You have to do that with a call to
NewHandle (myHandle=NewHandle(size);). Now you can have a size of zero, but
your handle will still point somewhere. So if you do not call NewHandle,
you will not be creating "holes" in your memory.
Hope this helps, let me know if you have further questions.
dnebing
Path: ucivax!gateway
From: jimlynch@netcom.com (Jim Lynch)
Subject: Re: Initializing a handle.(Q)
Message-ID: <9303160651.AA24819@netcom3.netcom.com>
Newsgroups: fa.think-c
Lines: 88
Date: 16 Mar 93 06:52:07 GMT
>>>>
When I declare a handle is it really a pointer to another pointer, or is
it just a pointer?
<<<<
A handle is a pointer to a (master) pointer to the allocated memory.
>>>>>
It seems to me that a handle is really just a pointer that functions like
NewHandle and GetCTable cause to point to another pointer.
<<<<<
Not quite, but close. A handle is four bytes of memory allocated and type-
checked by the compiler. Its function is to (eventually) point to a master
pointer which points to your block.
Here are some rules for safe pointer usage:
1) you must allocate the storage for the pointer itself
2) you must allocate the space that the pointer will point to
3) you must set the pointer to the address of the storage and
4) you must initialize the storage to some meaningful value(s).
Granted, there will be times when it's not possible to do all of the above
in one statement (e.g., "int *p = (int *) malloc(sizeof(int)) ; *p = 0;" OOPS!
that's two statements... well, you get the idea: the initialization happens
_right_ after you declare the pointer), but following these rules in some form
will guarantee safe pointer usage.
>>>>>
if a declaration like Handle myhandle;
causes a resulting structure like this to be allocated
------------------ ------------------ -----------
|myhandle |----------->|32Bit Pointer |------>|NULL |
------------------ ------------------ -----------
<<<<<
I have to stop you right there. The declaration "Handle myHandle" _only_
allocates space for the handle. i.e., you have:
------------------
|myHandle |
------------------
so far. If you now say "myHandle = NewHandle(numOfBytes) ;", then you either
have:
------------------ ----------------- ------------
|myHandle |------>| master pointer|---->| the block|
------------------ ----------------- ------------
or else you have:
------------------
|myHandle (=NULL) |
------------------
which means that NewHandle could not allocate the block (and you should not try
to use the (non-existant) space.)
>>>>>
If I set a handle to NULL shortly after I declare it and before I use it,
then I'm not creating any 32 bit holes right?
<<<<<
If you have
------------------ ----------------- ------------
|myHandle |------>| master pointer|---->| the block|
------------------ ----------------- ------------
and you then set myHandle to the null pointer (which happens to be zero),
you not only lose contact with the master pointer, but also to the block.
If you want to get rid of the block, call DisposeHandle(myHandle) and then
you'll basically have
------------------ -------------------------
|myHandle |------>| (null) master pointer |
------------------ -------------------------
and you _should_ now set myHandle to NULL, at which point you'll have:
------------------
|myHandle (=NULL) |
------------------
Hope this helps...
Path: ucivax!gateway
From: gurgle@netcom.com (Pete Gontier)
Subject: Re: Initializing a handle.(Q)
Message-ID: <9303160820.AA15640@netcom2.netcom.com>
X-Mailer: ELM [version 2.3 PL11]
Newsgroups: fa.think-c
Lines: 14
Date: 16 Mar 93 08:20:25 GMT
> If you want to get rid of the block, call DisposeHandle(myHandle) and then
> you'll basically have
>
> ------------------ -------------------------
> |myHandle |------>| (null) master pointer |
> ------------------ -------------------------
Whoa there, little dogie! This is not the case on my Quadra 800
running 7.1. The master pointer doesn't change, but I imagine
the housekeeping bytes associated with it do. I figured this
had to be bogus because nil is used to signify purged handles.
--
Pete Gontier // EC Technology // gurgle@netcom.com
Path: ucivax!gateway
From: jimlynch@netcom.com (Jim Lynch)
Subject: More handle stuff...
Message-ID: <9303160914.AA18727@netcom2.netcom.com>
Newsgroups: fa.think-c
Lines: 15
Date: 16 Mar 93 09:14:37 GMT
Thanks to Pete Gontier who says that this:
> If you want to get rid of the block, call DisposeHandle(myHandle) and then
> you'll basically have
>
> ------------------ -------------------------
> |myHandle |------>| (null) master pointer |
> ------------------ -------------------------
is not totally correct. According to Pete, the master pointer doesn't actually
change, although the flag bits that are attributes of it do.
My main point was to show that myHandle still points to the master pointer and
to be on the safest side, you should put a zero in myHandle so it no longer
points at the master pointer.
Path: ucivax!gateway
From: Chris_Page@qmgated.mv.us.adobe.com (Chris Page)
Subject: RE>Re- Initializing a hand
Message-ID: <9303162215.AA15768@qmgw.mv.us.adobe.com>
Newsgroups: fa.think-c
Lines: 43
Date: 16 Mar 93 22:15:10 GMT
Reply to: RE>Re: Initializing a handle.
> The master pointer doesn't change, but I imagine the housekeeping
> bytes associated with it do.
In fact, master pointers that are free point to each other in a linked
list. The heap zone header contains a pointer to the first free master
pointer (struct Zone.hFstFree). The last master pointer in the list
points to a memory location which contains null. In this way, a free
master pointer can be found quickly, without scanning all master
pointers.
Therefore, when DisposeHandle() or DisposePtr() (New-Age spelling :-)
is called, the value of the freed master pointer changes to point to
the next master pointer in the list.
Chris Page
Adobe Systems, Inc.
cpage@mv.us.adobe.com
Disclaimer: opinions expressed are my own and not necessarily those of
my employer.
--------------------------------------
Date: 3/16/93 12:54 AM
To: Chris Page
From: gurgle@netcom.com
> If you want to get rid of the block, call DisposeHandle(myHandle) and then
> you'll basically have
>
> ------------------ -------------------------
> |myHandle |------>| (null) master pointer |
> ------------------ -------------------------
Whoa there, little dogie! This is not the case on my Quadra 800
running 7.1. The master pointer doesn't change, but I imagine
the housekeeping bytes associated with it do. I figured this
had to be bogus because nil is used to signify purged handles.
--
Pete Gontier // EC Technology // gurgle@netcom.com
Path: ucivax!gateway
From: C511899@mizzou1.missouri.edu (Andrew McAllister)
Subject: Palette Animation (Q)
Message-ID: <9303171634.aa22592@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 39
Date: 18 Mar 93 00:34:39 GMT
Me again. (I really do own all of the IM and Think Reference, but sometimes
it's just not in the books).
Here's the situation: I have two windows. One is a non-Modal dialog the
other is a color window with a pixelmap copied into it (using CopyBits).
The color window has a palette set up as a grayscale all entries(0-255)
are set for pmAnimated. The dialog has no palette or color table that
I can tell.
The dialog has slider controls that I use to animate the palette of
the color window. Animation is realatively quick and resposive.
BUT none of the white (255) pixels in the color window will animate. :(
I checked the palette of the color window, sure enough, entry 255 is
set correctly given the position of the controls, but even if entry 255
is set to 0x0000 for all rgb colors, all pixels with value 255 are still
white.
So I'm thinking, It must be that I have a black and white dialog as the
current grafport (it has to be current so that I can draw the sliders
correctly). My reasoning extends to: White won't animate because the
current grafport (the dialog) needs white and black to be drawn correctly.
I'm assuming that the palette manager fulfull's the dialog's color first
by reserving black and white, then allows all other values 1-254 to animate
correctly.
This reasoning works EXCEPT that black animates correctly. Thats right,
all of the pixels in the picture with 0 values take on the appropriate gray
value. And the black pixels in the dialog stay black.
Oh sure I can set entry 0 in the monitor's color table so that white
animates, but that's not the nice way to do things, I mean what is the
palette manager for if you have to make direct modifications to the
monitor's color tables? When you animate the monitor color table directly,
you could accidentally animate yourself so much that you can't see the
controls anymore. (Don't laugh I've done this one to many times)
I tried creating a color dialog and then animating it's palette hoping
that it would affect the other window, but when I tried to create a dctb
resource, ResEdit ate my harddrive in a horrific crash. (Oh yes I back up
everything once a day so I was saved).
Any ideas?
Thanx in advance (again).
andy mcallister c511899@mizzou1.missouri.edu
"Doom dispare and agony for me."
Path: ucivax!gateway
From: C511899@mizzou1.missouri.edu (Andrew McAllister)
Subject: Palette Animation (Q2) The saga continues
Message-ID: <9303172159.aa17420@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 17
Date: 18 Mar 93 05:59:54 GMT
IN my ealier post (the one right before this one) I mentioned I was having
trouble animating a window using the Palette Manager. A few more details:
I'm using a IICX with Sys7.01tunned Think-C v5.02 and 8 megs of ram.
An additional weirdness:
When I run my prog with the debugger in Think-C and open,move the
slider controls, then close the dialog (GetNewDialog, DisposDialog), the
controls work (except for the white pixels which still don't animate).
I've set my prog to repeatedly open the dialog, and for some reason, the first
time I call it, the white pixels don't animate, the second: the black
pixels don't animate, and the third: all pixels animate correctly. BUT this
sequence only occurres if I move the sliders and animate each time I get
a new dialog. This is completely reproducable!
Even weirder: If I compile and run the program as an application then
nothing animates at all. The sliders don't work.
Now I'm really confused and think I will play Solitare until morning.
Andy (wish I had a dime for everytime I crashed my machine) McAllister
c511899@mizzou1.missouri.edu
Path: ucivax!gateway
From: idowell@bbn.com
Subject: System Error 41 on ExitToShell()
Message-ID: <9303190815.aa07054@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 10
Date: 19 Mar 93 16:15:29 GMT
Can anyone tell me why I might get a System Error 41
(can't load the Finder error) upon calling ExitToShell()?
FinderName is equal to "Finder". Falling through main()
is not an option. Doesn't crash in the debugger but the
application always crashes. Think C 5.0.4, System 7.0.1.
Thanks,
Ian Dowell
idowell@bbn.com
Path: ucivax!gateway
From: idowell@bbn.com
Subject: more System Error 41 on ExitToShell()
Message-ID: <9303201041.aa16349@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 14
Date: 20 Mar 93 18:41:20 GMT
>When I invoke ExitToShell() I get a System Error 41
>(Couldn't load Finder) error. This runs fine under
>the debugger. FinderName is equal to "Finder".
Falling through main() is not an option. The code works
fine under System 6 (I'm running System 7.01). It also
works fine if I quit the Finder while running my app.
Killing the Finder from my app before ETS() would be
kludgy. Anyone have any other suggestions? What happens
if ETS/Launch tries to launch the Finder and it's already
running?
Thanks,
Ian Dowell
idowell@bbn.com
Path: ucivax!gateway
From: huff@mcclb0.med.nyu.edu ("Edward J. Huff")
Subject: RE: Initializing a handle.(Q)
Message-ID: <01GW3K1AP0NM001KDU@MCCLB0.MED.NYU.EDU>
Content-transfer-encoding: 7BIT
Newsgroups: fa.think-c
Lines: 22
Date: 22 Mar 93 11:03:44 GMT
X-Envelope-to: think-c@ics.uci.edu
>> If you want to get rid of the block, call DisposeHandle(myHandle) and then
>> you'll basically have
>>
>> ------------------ ----------------------------
>> |myHandle |------>| undefined master pointer |
>> ------------------ ----------------------------
>
Just for the record, after calling DisposeHandle, the master pointer
belongs to the memory manager. Precisely what is in there does vary with
different versions of system software, and you should not depend on it. In
at least some versions, disposed master pointers are linked onto a list.
In any case, storing a zero into the master pointer after calling
disposehandle is a bad thing to do which would typically cause loss of many
available master pointers. Never store into the master pointer. Never use
fake handles.
--
Edward J. Huff huff@mcclb0.med.nyu.edu (212)998-8465
Keck Laboratory for Biomolecular Imaging
NYU Chemistry Deptartment, 31 Washington Place, New York NY 10003
Path: ucivax!gateway
From: jimlynch@netcom.com (Jim Lynch)
Subject: RE: Initializing a handle.(Q)
Message-ID: <9303221423.AA15872@netcom2.netcom.com>
Newsgroups: fa.think-c
Lines: 19
Date: 22 Mar 93 14:23:36 GMT
>>>>>
>> If you want to get rid of the block, call DisposeHandle(myHandle) and then
>> you'll basically have
>>
>> ------------------ ----------------------------
>> |myHandle |------>| undefined master pointer |
>> ------------------ ----------------------------
>
Just for the record, after calling DisposeHandle, the master pointer
belongs to the memory manager. Precisely what is in there does vary with
different versions of system software, and you should not depend on it.
<<<<<
Exactly right, however at that point, you _can_ depend on myHandle pointing
to a disposed master pointer no matter what system software is there. This
is usually bad. That was the point of my statement that you should then set
myHandle to NULL so it no longer points to a dead master pointer whatever is
in there.
Path: ucivax!gateway
From: ingles@engin.umich.edu (Ray Ingles)
Subject: Float-to-String Function?
Message-ID: <5ee8bba1d.0033718@syndicoot.engin.umich.edu>
Newsgroups: fa.think-c
Lines: 18
Date: 24 Mar 93 04:35:13 GMT
Boy, I hope I'm not doing something stupid. I'm a new C programmer. I'm
doing a class project where I have to build on another person's code. The
stuff was written in C++ to be compatible with Think C.
The problem? He used a string to store some critical numerical values
(for a reason to long to go into). I need to put a float in there. There
are quite a few string-to-x functions, but not one x-to-string that I can
find. I can think of a truly kludgy way to do it, and I will if I have to,
but I figure someone out there must have an idea or two...
Thanks!
Sincerely,
Ray Ingles ingles@engin.umich.edu
"Anybody who has ever seen a photograph showing the kind of damage that
a trout traveling that fast can inflict on the human skull knows that
such photographs are very valuable. I paid $20 for mine." - Dave Barry
Path: ucivax!gateway
From: ingles@engin.umich.edu (Ray Ingles)
Subject: Okay, I'll RTFM.
Message-ID: <5ee94c7de.0038cc3@catnip.engin.umich.edu>
Newsgroups: fa.think-c
Lines: 11
Date: 24 Mar 93 07:15:59 GMT
I *knew* I was doing somthing really stupid. You needn't bother telling
me. I'm wrinkled into a ball of contrition. The exact ANSI defintion of
sprintf is embossed on the inside of my skull in Times-Roman font.
*Very* Sincerely,
Ray "mindless whelp" Ingles ingles@engin.umich.edu
"...until his lone functioning brain cell quieted down and went back to
sleep." - Dave Barry
Path: ucivax!gateway
From: BEASON@uno.cc.geneseo.edu (Bob Beason)
Subject: RE: Float-to-String Functions
Message-ID: <01GW6H8XKDJ8000B0P@geneseo.bitnet>
Newsgroups: fa.think-c
X-VMS-To: IN%"think-c@ics.uci.edu"
Lines: 7
Date: 24 Mar 93 13:16:11 GMT
There are several string-to-x and x-to-string functions in SANE. I don't
have a manual handy to give you specifics, though. Depending on your
use of the string, you could use NumToString() which converts a LONGINT to
a Str255.
Bob Beason
beason@geneseo.bitnet
Path: ucivax!gateway
From: ingles@engin.umich.edu (Ray Ingles)
Subject: RE: Float-to-String Functions
Message-ID: <5eeb1cf4d.003b97e@agar.engin.umich.edu>
Newsgroups: fa.think-c
Lines: 8
Date: 24 Mar 93 15:55:25 GMT
Cool. Thanks for the help, it looks like I could do it with sprintf. But I'll
look at SANE, too; it sounds like I need to. :->
Thanks again,
Raymond Ingles ingles@engin.umich.edu
"An apple every eight hours keeps three doctors away." - B. Kliban
Path: ucivax!gateway
From: swf5601@tamsun.tamu.edu ("Stephen W. French")
Subject: Please unsubscribe me
Message-ID: <9303250601.AA22171@tamsun.tamu.edu>
X-Mailer: ELM [version 2.3 PL11]
Newsgroups: fa.think-c
Lines: 3
Date: 25 Mar 93 06:02:02 GMT
Please unsubscribe me from the mailing list.
Steve French
Path: ucivax!gateway
From: Wachs#m#_J#d#.NY_Support_#l#L-Z#r#@jpmorgan.com ("Wachs, J.")
Subject: RE: Please unsubscribe me
Message-ID: <9303251405.AA20239@tcpg01a.ny.jpmorgan.com>
Newsgroups: fa.think-c
Lines: 10
Date: 25 Mar 93 14:05:58 GMT
mail to request-think-c@ics.uci.edu
_______________________________________________________________________________
From: Stephen W. French on Thu, Mar 25, 1993 1:56 AM
Subject: Please unsubscribe me
To: think-c@ics.uci.edu
Please unsubscribe me from the mailing list.
Steve French
Path: ucivax!gateway
From: CCPABLO@mizzou1.missouri.edu (Paul Bohnenkamp)
Subject: (none)
Message-ID: <9303250757.aa19103@q2.ics.uci.edu>
Newsgroups: fa.think-c
Organization: University of Missouri-Columbia Campus Computing, 314-882-2000
Lines: 1
Date: 25 Mar 93 15:57:48 GMT
Please subscribe Paul Bohnenkamp
Path: ucivax!gateway
From: CCPABLO@mizzou1.missouri.edu (Paul Bohnenkamp)
Subject: Movies.h
Message-ID: <9303250801.aa19562@q2.ics.uci.edu>
Newsgroups: fa.think-c
Organization: University of Missouri-Columbia Campus Computing, 314-882-2000
Lines: 4
Date: 25 Mar 93 16:02:01 GMT
Anyone know where I can find Movies.h? Archie finds Simpleinmovies.hqx
which isn't what I need.
-thanks in advance
Path: ucivax!gateway
From: nagel@kithrup.irvine.ca.us ("Mark D. Nagel")
Subject: Re: Please unsubscribe me
Message-ID: <0E010598.te6ebc@kithrup.Irvine.CA.US>
X-Mailer: uAccess - Macintosh Release: 1.6v1
Newsgroups: fa.think-c
Reply-To: "Mark D. Nagel" <nagel@kithrup.irvine.ca.us>
Lines: 13
Date: 25 Mar 93 16:22:25 GMT
Reply to letter <9303251405.AA20239@tcpg01a.ny.jpmorgan.com> from "Wachs, J." <Wachs#m#_J#d#.NY_Support_#l#L-Z#r#@jpmorgan.com>:
> Subject: RE: Please unsubscribe me
>
> mail to request-think-c@ics.uci.edu
Actually, that should be think-c-request@ics.uci.edu. Please
try not to send unsubscribe requests (or any other
administrative notes) to the entire list if you can help it,
folks!
Mark
Path: ucivax!gateway
From: jbcondat@attmail.com
Subject: Chaos Digest, #1.12
Message-ID: <9303252355.aa27825@q2.ics.uci.edu>
Content-Type: text
Newsgroups: fa.think-c
Lines: 757
Date: 26 Mar 93 07:55:25 GMT
Chaos Digest Lundi 1 Mars 1993 Volume 1 : Numero 12
Editeur: Jean-Bernard Condat (jbcondat@attmail.com)
Archiviste: Yves-Marie Crabbe
Co-Redacteurs: Arnaud Bigare, Stephane Briere
TABLE DES MATIERES, #1.12 (1 Mars 1993)
File 1--Re: Des adolescents anglais transformes en hackers
File 2--Piratage sur le reseau Janet
File 3--Hackers en Coree du Sud
File 4--Guide d'Utilisation d'un Outil de Securite PC (manuel)
Chaos Digest is a weekly electronic journal/newsletter. Subscriptions are
available at no cost from jbcondat@attmail.com. The editors may be
contacted by voice (+33 1 47874083), fax (+33 1 47877070) or S-mail at:
Jean-Bernard Condat, Chaos Computer Club France [CCCF], 47 rue des Rosiers,
93400 St-Ouen, France
Issues of Chaos-D can also be found on some French BBS. Back issues of
ChaosD can be found on the Internet as part of the Computer underground
Digest archives. They're accessible using anonymous FTP from:
* ftp.eff.org (192.88.144.4) in /pub/cud
* red.css.itd.umich.edu (141.211.182.91) in /cud
* halcyon.com (192.135.191.2) in /pub/mirror/cud
* ftp.ee.mu.oz.au (128.250.77.2) in /pub/text/CuD
* nic.funet.fi (128.214.6.100) in /pub/doc/cud
CHAOS DIGEST is an open forum dedicated to sharing French information among
computerists and to the presentation and debate of diverse views. ChaosD
material may be reprinted for non-profit as long as the source is cited.
Some authors do copyright their material, and they should be contacted for
reprint permission. Readers are encouraged to submit reasoned articles in
French, English or German languages relating to computer culture and
telecommunications. Articles are preferred to short responses. Please
avoid quoting previous posts unless absolutely necessary.
DISCLAIMER: The views represented herein do not necessarily represent
the views of the moderators. Chaos Digest contributors
assume all responsibility for ensuring that articles
submitted do not violate copyright protections.
----------------------------------------------------------------------
Date: Tue Feb 23 20:06:14 CST 1993
From: jp-sorlat@altern.com (jp-sorlat )
Subject: File 1--Re: Des adolescents anglais transformes en hackers
NEWS RELEASE
Press Officer: Martin Herrema: 071 911 5101
February 24, 1993
Statement on Hacking at PCL
The Polytechnic of Central London (now the University of Westminster) was
affected by a 'hacker' on April 23, 1990. The 'hacker' gained access to
the polytechnic's computer teaching systems via the academic joint computer
network JANET, which serves all British universities.
The 'hacker' made some changes to the system, mainly to the on-screen
start-up messages. These were spotted very quickly on the morning of April
23 by staff, who then changeg the public access messages back to the
correct wording. The University of London Computer Centre, which provides
network support for JANET, was informed of the situation.
The teaching systems contained a variety of information concerned with
course administration and delivery, but there was no evidence thet the
hacker achieved anything other than a change of message. The systems were
turned completely to normal within a few days, and the incident caused
minimal disruption to the work of the polytechnic. Since the incident
further security measures have been built into the University's computer
systems.
------------------------------
Date: Wed Feb 24 13:19:23 1993
From: S15810@PRIME-A.PLYMOUTH.AC.UK (Stuart Wyatt )
Subject: File 2--Piratage sur le reseau Janet
ENGLISH HACKER PROSECUTED
+++++++++++++++++++++++++
Unlike America and most other countries, England does not have too much to
show for arresting hackers and bringing them to justice. This means that
each time a hacker is caught, it makes headline news and creates the same
foreboding atmosphere that hacking reports created in the early 1980's.
The latest story is of a young hacker, Paul Bedworth.
Bedworth started hacking at the age of 17, and through the many computers
he accessed, he teamed up with 2 other hackers 10 years his senior. From
his bedroom, using his #200 computer he dialed into pad-ports at
Universities and from there, penetrated Internet. By spending hours at a
time hacking, he amassed huge telephone bills (one was 34 pages long). Due
to the BT bills, his parents banned him from using their telephone. This
however did not stop his antics - He soldered a link from the BT socket
and ran the wire under the carpet into his bedroom.
By using Janet (The Joint Academic Network) he hacked into many University
computers with the main intent to delete sensitive files and crash the
system. His idea of hacking was to disrupt as many computer systems as
possible. Other computers he attacked were the Financial Times network,
Lloyds bank, and a whole host of computers spanning France, Germany and
Luxenbourg.
He got around the problem of running up huge telephone bills by accessing
the billing computer, and transfering large segments of the bill to
innocent users at Manchester University.
Bedworth was arrested after another University put a trace on his calls.
He was charged with three dishonesty charges, which he pleaded not guilty
in court. The case is continuing at the moment (24 Feb 1993) and I will
forward any news as and when I get it.
In the U.K., there is a law which prohibits hacking, and hackers can be
charged with gaining unlawful access to a machine and if any data is
altered or destroyed, then that is also a criminal offence. It seems
strange that Bedworth was not charged with gaining unlawful access and
the destruction of data - But then, unlike the rumours that circulate the
world, the British judicial system is not all its cracked up to be.
________
-Stuart Wyatt ( )____
( Alas, life )
P.S. I am currently collating information on hacking and( is but an )
hackers for a forthcoming book. If anyone wishes ( Aardvaark.. )
to contact me IN THE STRICTEST OF CONFIDENCE then ( __ )
feel free to email me. . (_____) (____)
* * * * * * * * * * * * * * * * . ? . ()
* CHEERS_ THEN - _ _ * __ ()
* ___/_/______|_|___| |__ * / \ ()
* |________ _______| |__| * |_ _|
* / / | | | | | | * |(0)||(0)|
* / /___ | | | | | | * /|_ \/ _|\
* /___ / | | | | | | * || | == | ||
* / / | | \ \__/ / * || \____/ ||
* / / |_| \____/ * ///\ !! /\\\
*-*-/_/-*-*-*-*-*-*-*-*-*-*-*-*-=-=-=-=-=-=-=-=-!!!-!-=-=-!-!!!-=-=-=-=-=-=
From : Stuart Wyatt (Student, HNDCS1)
Faculty of Technology, *> Be excellent to everyone - dude <*
University of Plymouth,
Drake Circus, Email: S15810@uk.ac.plym.pa (PRIME)
Plymouth, England. stuartw@uk.ac.plym.cd.zeus (SUN)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
------------------------------
Date: 20 Feb 93 06:17:14 GMT
From: kafka@desert.hacktic.nl (Kafka )
Subject: File 3--Hackers en Coree du Sud
Repost from: alt.security
+++++
COMPUTER HACKER HELD FOR FORING PAPERS
Seoul, Feb. 18 (AFP) - South Korean prosecuters
have arrested a computer hacker on charges of
falsifying presidential Blue House documents to
demand classified data from a dozen financial
institutions, authorities said today. Prosecuters
arrested Kim Jae-yol, 23 late yesterday in the
first such hacker case here on multiple charges of
forgery of official documents and attempted fraud.
Kim, an unemployed, self-taught computer wizzard,
allegedly falsified the Blue House's secret
computer password and presidential facsimiles to
demand classified computer information from 12
financial institutions, includang several
commercial banks.
+++++
Mmmm, I wonder how you 'falsify (....) a password'.
(P)
==== Kafka ======= kafka@desert.hacktic.nl ===== 1st class l00zur =========
"The Techno Rebels are, whether we recognize it or not, agents of the Third
Wave. They will not vanish but multiply in the years ahead."
- The Third Wave, Alvan Toffler
------------------------------
Date: Mon Feb 8 08:51:00 CST 1993
From: Cerasela Tanasescu
Subject: File 4--Guide d'Utilisation d'un Outil de Securite PC (manuel)
Copyright: DCSIS SA, 1993
KHEOPS
The confidentiality of your PC
USER GUIDE--Version 2.1
S.A. DCSIS, Avenue de Cambridge, Technopole CITIS
14200 HEROUVILLE SAINT CLAIR, FRANCE
Phone: (33) 31.06.00.06, Fax :(33) 31.43.79.95
WARNING
The DCSIS Company may not be held responsible for the damage that may be
caused directly or indirectly by this software.
PRECAUTION
Any manual installation or uninstallation together with any illegal copy of
KHEOPS may damage the data on your hard disk.
We strongly recommend performing a backup of your data before installing
KHEOPS. This backup should be renewed frequently as a prevention against
fraudulent intrusion attempts which might affect the right functionning of
KHEOPS.
If this was the case, DCSIS could not be held responsible for any damage.
1. PRESENTATION OF KHEOPS
Nowadays, all micro-computers contain sensitive data: client files,
production figures, programs, payrolls etc... Besides, all this data and
knowhow are stored on computers that more and more people know how to use,
whether they are entitled or not. The risk of information leak and file
copy is growing. Companies must therefore protect themselves.
DCSIS has developped KHEOPS with this in mind. This is an access control
software for all PC/AT micro-computers running MS/DOS(Versions 3.2x and
5.0). This program ensures the safety of the PC whether mono or multi
users, connected to a network or not, so that maximum confidentiality is
guaranteed.
Main Functions
- computer access control;
- computer locking up when the user gets away from his PC;
- boot control with a diskette.
Besides, with the diskette administrator program:
- users management (up to 31 + administrator)
- logbook consultation
- computer unlocking
- program customization
2. MAIN FUNCTIONS
The security ensured by KHEOPS is strictly software, i.e. there is no need
of any hardware device.
2.1. Access control
Computer security conventions specify two terms: user identifier and
password. Every user is given: (1) a user identifier, hereafter user id,
which may be structured around the notion of user group, (2) a password.
This pair user id/password must be unique and known only to the user. The
password must obviously never be written or communicated to anyone.
Procedure
Access control is carried out by the only program that can run when the hard
disk is locked up. This program prompts the user to type his user id. and
password. Once this is done, the pair user id/password is looked up by
KHEOPS in a user list stored on the disk. This list is coded and is unknown
to the operating system.
If this control is successful and the password is recognized as valid
(validity date), then the hard disk is made available and the user can make
full use of his PC.
On the other hand, if the authentification fails, the user is invited to
start again. After 'n' unsuccessful attempts, keyboard and hard disk are
locked up: hard disk reboot is impossible. Diskette boot will not give
access to hard disk. Only the administrator can put things in order again
thanks to his KHEOPS diskette.
Hard disk locking will also occur if a user tries to log in with an outdated
password.
The user list can hold up to 32 entries, that is an administrator plus 31
users. This makes it possible to share a PC between several users, every
one of them being answerable for his session.
2.2. Hard disk locking
When the disk is locked up, it is apparently empty. The only response to
the DIR command is: "NO FILE FOUND". The disk and all its partitions
(virtual disks D:\, U:\, V:\...) are also locked up. It is impossible to
copy or delete files, to create directories of to execute programs. Last
but not least, neither NORTON nor PCTOOLS are able to retrieve the files.
2.3. Resident program
When the PC remains unused for a certain period of time, a small resident
program is activated after a given period of time. This program locks up
screen and keyboard, and displays the standard login window. The only
action that remains possible is to enter user id. and password. The
resident program is activated due to a temporization or upon user request,
e.g. by pressing right SHIFT/left SHIFT.
3. SECURITY MANAGEMENT
3.1. User Identifier and Password
Both user id. and password must be 7 characters long. But contrary to the
user id. which is permanent, the password must be renewed regularly.
Let us explain the procedure: when anyone runs the access control for the
first time, he is invited to enter his password twice (to make sure the
spelling is correct).
This password has a three months validity. During the last 15 days of
validity the user will be prompted to change his password. A message will
display the deadline and explain that this change is compulsory. The user
is free to take no notice of this warning but once the deadline is reached
the computer disk will be locked up and only the security administrator
will have power to straighten things up.
If the user decides to change his password, again KHEOPS will invite him
to type it twice. The new password will only be accepted if it is found to
be different from the user's last 6 passwords.
The procedure explained above is only valid for "standard users". There
are two exceptions:
- the administrator for whom there is no password time restriction;
- temporary users. The validity deadline is decided upon by the
administrator. These password are not renewable. This option allows
people to work on the PC on a temporary basis.
3.2. Logbook
Like in the case of the user id/password list, the logbook is coded. Only
the administrator is entitled to consult it. This book is updated at the
time of access control.
The following information is available:
- successful connexions (and number of attempts);
- disconnexions and duration of session;
- PC lock up following 'n' unsuccessful password presentations;
- PC lock up due to outdated password presentation.
Every entry in the logbook also includes date, time and user id. In the
case of a system locked up due to 'n' unsuccessful attempts, only the last
user id. is kept.
The logbook contains up to 127 entries. Once the file is full, new entries
replace the oldest records.
4. KHEOPS IMPLEMENTATION (Administrator)
4.1. Installation
KHEOPS installation imperatively requires a floppy disk drive. Use a KHEOPS
diskette with the adequat format (3.5' or 5.25').
- Insert the KHEOPS diskette into drive a;
- Boot the PC again (on a:).
The following pull-down menu will then be displayed on the screen:
| MAIN MENU |
| - Install KHEOPS |
| - Modify present system |
| - Uninstall KHEOPS |
On every screen the following warning is displayed for information:
| On all menu |
| ESC: quit |
| : preceding item |
| : next |
| : item(un)select |
- Validate every option by pressing the ENTER key;
- Choose option "INSTALL KHEOPS". The program will display the following
message:
"Installation under way. Please wait".
- Another window will pop up:
| Administrator characteristics |
| User identifier : |
| Password : |
- Enter administrator user id. and password (7 characters). Both must be
validated by pressing ENTER key. They will be required on every use of
the KHEOPS diskette;
- Confirm the password.
Installation will then proceed. Wait for the message:
"KHEOPS is installed"
Program customization is now necessary.
| SYSTEM CUSTOMIZATION |
| Resident program activation delay (mn) : 5 |
| Background tasks authorized : 0 |
| Debugging authorized : 0 |
| New hot-key : N |
| Screen backup drive : C |
| Number of attempts before lock up : 3 |
| Windows utilization : N |
The administrator can now "add a user".
- Press "ENTER" to type a user id, or
- Press "ESC" if the user list is complete.
The first user that is created in the list is the administrator.
In order to put an end to KHEOPS installation :
- Press "ESC" key on Main Menu;
- Remove the KHEOPS diskette (KHEOPS will prompt you to do so);
PC will reboot automatically. On PC reboot, the screen will display the
standard login screen. Two situations may now occur:
Case #1: The administrator attempts to log in. He can type his id. and
password,
Case #2: A new user logs in. The program then displays the following
message:
"Enter new password"
The password must be 7-characters long. This password must be checked as
typing errors are easily made. This is why the user is prompted to type
his password once again.
If the two secret codes are identical, access to the PC is authorized.
"KHEOPS installation is complete"
4.2. System Modification
- Insert KHEOPS diskette into drive a:.
- Type the following, then press "ENTER":
"A:KHEOPS"
A window invites the administrator to type his id. and password.
| Administrator characteristics |
| User identifier : |
| Password : |
Following which the main pull-down menu is displayed on the screen:
| MAIN MENU |
| - Install KHEOPS |
| - Modify current system |
| - Uninstall KHEOPS |
Upon selection of "Modify current system" another pull-down menu is
displayed:
| SYSTEM MODIFICATION |
| Work on the list |
| Unlock hard disk |
| Logbook consultation |
| System customization |
Work on the list
++++++++++++++++
| WORK ON THE LIST |
| Cancel a user |
| Add a user |
| Add a temporary user |
| Unlock a user |
| User list consultation |
"Add a user"
This option is used to allow a new user to use the micro-computer. The
administrator is invited to type the user's name:
| User characteristics |
| Name : Doherty |
This name is the user id. and must imperatively be 7-characters long.
"Cancel a user"
This option is used to disable a user. The administrator is invited to
type the user's name:
| User Removal |
| Name : |
Once the administrator has pressed ENTER, the user no longer stands in the
list.
"Add a temporary user"
This option makes it possible to add a user to those who have access to the
PC on a temporary basis.
| Temporary user |
| Name : |
- Type his user id. and press "ENTER".
The program will then invite the administrator to type the user's time limit
of access to the PC.
| TEMPORARY ACCESS |
| Validity deadline : |
| Year : 91 |
| Month : 07 |
| Day : 15 |
| |
| Confirmation (Y/N) : o |
- Type two digits for year, month and day, then validate your data by
pressing "Y"es of "N"o.
"Unlock a user"
When a password is outdated (3 months validity period), the PC is
temporarily locked up. Only the administrator can unlock it thanks to
this option.
"Display user list"
This option is used to display the list of all users entitled to use the PC.
Unlock Hard Disk
++++++++++++++++
After 'n' unsuccessful login attempts the hard disk is locked up. Only the
administrator has the possibility to unlock it thanks to this function.
Logbook Consultation
++++++++++++++++++++
A cyclic logbook containing the last 127 entries is displayed with the
following data:
- user id.;
- date and time;
- action: login, logout, PC locking;
- description: number of login attempts, duration of connexion, number
of unsuccessful attempts.
This option makes it possible for the administrator to check who uses the
micro-computer and for how long.
System Customization
++++++++++++++++++++
Thanks to this option the administrator can adapt KHEOPS to users need.
| SYSTEM CUSTOMIZATION |
| Resident program activation delay (mn): 5 |
| Background tasks authorized : o |
| Debugging authorized : o |
| New hot-key : o |
| Screen backup drive : c |
| Number of attempts before lock up : 3 |
| Windows utilization : n |
* "Resident program activation delay"
The administrator should type the temporization that is desirable before
the login screen is displayed when the PC remains unused.
* "Background task authorization"
We strongly recommend using this option in case of intensive use of the
hard disk (e.g. compilation, printing). Keyboard will be locked up, but
background tasks will carry on their job. In case your reply is No,
keyboard, screen and hard disk will be subject to access control.
Remark: "Background tasks" must be authorized in the case of a network
server.
* "Debugging authorized"
The administrator indicates whether or not the use of a debugging tool is
authorized.
Remark: Debugging should be authorized in case the PC shows uncontrollable
reboot problems.
* "New hot-key"
The hot-key activates the resident program at any time. The default hot-
key value is "left shift/right shift". Nevertheless the administrator is
free to change the hot-key value.
* "Screen storage disk"
This option enables screen backup on a hard or virtual disk (200 KB are
necessary). The default disk drive is c:.
* "Number of attempts before system lock-up"
This function makes it possible to customize the number of user id/
password presentation attempts before hard disk lock-up.
REMARK: Any modification of one of these options will only be taken into
account once reboot has been performed.
4.3. Uninstalling
- Insert KHEOPS diskette into drive a:;
- Type: "A:KHEOPS";
The following window pops up:
| Administrator characteristics |
| User identifier : |
| Password : |
Once the administrator id. and password have been validated and checked
KHEOPS displays the main menu.
| MAIN MENU |
| - Install KHEOPS |
| - Modify present system |
| - Uninstall KHEOPS |
- Choose "Uninstall";
After a few seconds the following message is displayed on the screen:
"The system must be reset"
- Take the KHEOPS diskette out of the drive as the PC will reboot
automatically.
"KHEOPS has been totally uninstalled"
4.4. Hard Disk Unlocking
After 'n' unsuccessful user id/password presentations, the following
message is displayed on the screen:
| Hard disk and keyboard are locked up. |
| Please phone the administrator. |
The PC will be unable to boot on hard disk. Any attempt to do so will
result in the screen to display the following message:
"Non system disk".
- Insert KHEOPS diskette into drive a:;
- Reset the PC so that it boots on the diskette;
- Type adminitrator id. and password.
The following message is then displayed:
"The system must be reset"
- Leave the diskette in drive a: and reboot. Then, when prompted to, type
administrator id. and password.
The PC is unlocked.
5. KHEOPS IMPLEMENTATION (Users)
Now that KHEOPS has been installed, your data on the PC's hard disk is
protected.
5.1. PC Reset
At boot time, the user is invited to type his id. and password. Having
done that, he has free access to the resources of the PC.
5.2. Resident Program Activation
The function of the resident program is to lock up screen, if background
tasks are not authorized, and keyboard either due to temporization or upon
user request:
- Temporization: in case the PC has remained unused for 'n' minutes (as
set up by the administrator in the customization session, screen (if
background tasks are not authorized) and keyboard action is automatically
suspended.
KHEOPS displays the standard login window and invites the user to type his
id. and password. If the same user logs in again, his application is
restaured. In case another user attempts to connect himself then the PC
reboots.
- User request: the resident program can be deliberately activated by the
user by pressing the hot-key.
KHEOPS then displays the following message:
"End of session (Y/N) ?"
* By pressing the letter "Y" the user will ensure that the PC is
automatically rebooted if another user logs in;
* The user answers "N". This means that he wants to suspend his job
temporarily. KHEOPS displays the following message:
"Computer in use"
The only id/password acceptable are those of the user who pressed the hot-
key. Any other user will be rejected.
6. KHEOPS COMPATIBILITY
6.1. Hardware
KHEOPS can be installed on IBM PC/AT, PS/2 or compatible micro-computers
running MS/DOS version 3.2 to 5.0. DCSIS has tested this program on the
following computers: IBM PC/AT & PS/2, COMPAQ DeskPro (286S and 386S) and
LTE 286, SLT 286 and 386, EPSON EL2 and EL3S, GOUPIL G5 286, HP VECTRA 486,
OLIVETTI PC 310
6.2. Software
6.2.1. Standard software
KHEOPS has been tested and validated by DCSIS with the following programs:
MICROSOFT C, TURBO C, TURBO PASCAL, PCTOOLS, NORTON, DBASE, LOTUS 1.2.3...
6.2.2. Graphic software
KHEOPS can handle mouse and keyboard, which ensures compatibility with the
following programs: WORD 4 and 5, WINDOWS 2 and 3, PAINTBRUSH, PAGE MAKER
6.2.3. Antivirus software
KHEOPS is compatible with VIRUSAFE+, trademark registered by Eliashim
Microcomputers, which has been recognized as one of the best antivirus
programs on the market (VIRUSAFE+ can handle 1400 virus and is wellknown
for its preventive and curative vocation). The joint use of KHEOPS and
VIRUSAFE+ ensures maximum micro-computer safety. Install Virusafe+ first
then KHEOPS (this is imperative).
6.2.4. Network
It is possible to install KHEOPS on every workstation of a local area
network (e.g. NOVELL network) so that every station is protected locally.
------------------------------
End of Chaos Digest #1.12
************************************
Path: ucivax!gateway
From: NLEONARD@rcnvms.rcn.mass.edu
Subject: using the sound manager to activate a touch tone phone
Message-ID: <01GW9FMUV00OD2PWE2@RCNVMS.RCN.MASS.EDU>
Content-transfer-encoding: 7BIT
MIME-version: 1.0
Newsgroups: fa.think-c
X-VMS-To: IN%"think-c@ics.uci.edu"
Lines: 13
Date: 26 Mar 93 16:04:50 GMT
Does anyone have a sample program that uses the waveTableSynth to
play more than 1 sine or square wave at a time. We are interested
in using the Mac speaker to control a home made touch tone phone
circuit.
Thank you,
Neil Leonard
nleonard@ecn.mass.edu
Computer Arts
Massachusetts College of Art
Path: ucivax!gateway
From: NLEONARD@rcnvms.rcn.mass.edu
Subject: artists looking for help w/ sound
Message-ID: <01GW9GDLVUMED2PWMC@RCNVMS.RCN.MASS.EDU>
Content-transfer-encoding: 7BIT
MIME-version: 1.0
Newsgroups: fa.think-c
X-VMS-To: IN%"think-c@ics.uci.edu"
Lines: 14
Date: 26 Mar 93 16:27:13 GMT
We are looking to do device control using the mac speaker. A pitch-to-
ttl converter can be made from $12 in parts. The circuit decodes the
2 note diads (chords) that a touch tone phone generates.
We are looking for a simple example that demonstrates the use of
the mac speaker to play more than one note at a time.
Neil Leonard
Assist. Dir.
Computer Arts
Massachusetts College of Art
nleonard@ecn.mass.edu
Path: ucivax!gateway
From: idowell@bbn.com
Subject: TCL Window Question
Message-ID: <9303260841.aa21944@q2.ics.uci.edu>
Newsgroups: fa.think-c
Lines: 12
Date: 26 Mar 93 16:41:49 GMT
Stupid TCL Question #5479:
I have a director-owner which has a pointer to
a director. When the user clicks the close box
of the window belonging to the director, both
the window and the director get Dispose() invoked.
How can I tell if the pointer that the director-owner
has is good? It is not set to null by the Dispose
method.
Thanks,
Ian Dowell
idowell@bbn.com